// axios的二次封装
import axios from 'axios'
// 引入提示框
import { Message } from 'element-ui';
import router  from '@/router'
import evn from './evn.js'

// 创建的axios的实例  instance
const instance = axios.create({
    baseURL:evn.pro.baseUrl,//基准地址
    timeout:3000
})

// 请求拦截

instance.interceptors.request.use((config)=>{
//    console.log(config.headers);
//   全局loading
//    除了登录接口以外的 接口才需要token 登录接口不设置 请求头
if(config.url !='/login'){
    let token  = localStorage.getItem('token')
    // 如何token存在 就给header设置Authorization字段
    token && (config.headers.Authorization = token)
}
    return config
},err=>{
    return Promise.reject(err)
})

// let obj = {
//     name:'zs',
//     aa:{
//         bb:'bb'
//     },
//     cc:{
//         dd:'dd'
//     }
// }
// let {name,aa:result,cc:code} = obj
// console.log(result);
// console.log(code);


// 响应拦截
instance.interceptors.response.use((res)=>{

    // 关闭loading 
    console.log(res.data);
    let {data:result,meta:{msg,status:code}} = res.data
   
    // console.log(result);
    // console.log(code);
    // successCode存放成功的状态码
    let successCode = [200,201,204]
    // 成功的情况
    if(successCode.includes(code)){
        // 如果包含  提示成功的消息
        Message({
            message:msg,
            type:'success'
        })
        //  拦截到登录接口的时候 把登录接口返回的token 设置到本地
        if(res.config.url == '/login'){
            localStorage.setItem('token',result.token)
        }

        // return result
        return Promise.resolve(result) //这里才是我们接口返回的数据
        
    }
    // 失败的情况
    if(msg =='无效token'){
        // 如果后端返回的提示文字是无效token的时候  就让用户调到登录页面
        // replace 跳转路由没有历史记录
        router.replace('/login')

    }
    // 失败的情况
    Message({
        message:msg,
        type:'error'
    })

   

    return Promise.resolve(msg) //在这里reslove的参数只是一个提示信息

},err=>{
    return Promise.reject(err)
})
export default instance





